home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / GCC 1.37.1r14 / BSD #includes / sys / sys⁄mount.h < prev    next >
Encoding:
Text File  |  1992-09-04  |  9.6 KB  |  289 lines  |  [TEXT/UNIX]

  1. /*
  2.  * Copyright (c) 1989 The Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    @(#)mount.h    7.22 (Berkeley) 6/3/91
  34.  */
  35.  
  36. typedef quad fsid_t;            /* file system id type */
  37.  
  38. /*
  39.  * File identifier.
  40.  * These are unique per filesystem on a single machine.
  41.  */
  42. #define    MAXFIDSZ    16
  43.  
  44. struct fid {
  45.     u_short        fid_len;        /* length of data in bytes */
  46.     u_short        fid_reserved;        /* force longword alignment */
  47.     char        fid_data[MAXFIDSZ];    /* data (variable length) */
  48. };
  49.  
  50. /*
  51.  * file system statistics
  52.  */
  53.  
  54. #define MNAMELEN 90    /* length of buffer for returned name */
  55.  
  56. struct statfs {
  57.     short    f_type;            /* type of filesystem (see below) */
  58.     short    f_flags;        /* copy of mount flags */
  59.     long    f_fsize;        /* fundamental file system block size */
  60.     long    f_bsize;        /* optimal transfer block size */
  61.     long    f_blocks;        /* total data blocks in file system */
  62.     long    f_bfree;        /* free blocks in fs */
  63.     long    f_bavail;        /* free blocks avail to non-superuser */
  64.     long    f_files;        /* total file nodes in file system */
  65.     long    f_ffree;        /* free file nodes in fs */
  66.     fsid_t    f_fsid;            /* file system id */
  67.     long    f_spare[9];        /* spare for later */
  68.     char    f_mntonname[MNAMELEN];    /* directory on which mounted */
  69.     char    f_mntfromname[MNAMELEN];/* mounted filesystem */
  70. };
  71.  
  72. /*
  73.  * File system types.
  74.  */
  75. #define    MOUNT_NONE    0
  76. #define    MOUNT_UFS    1
  77. #define    MOUNT_NFS    2
  78. #define    MOUNT_MFS    3
  79. #define    MOUNT_PC    4
  80. #define    MOUNT_MAXTYPE    4
  81.  
  82. /*
  83.  * Structure per mounted file system.
  84.  * Each mounted file system has an array of
  85.  * operations and an instance record.
  86.  * The file systems are put on a doubly linked list.
  87.  */
  88. struct mount {
  89.     struct mount    *mnt_next;        /* next in mount list */
  90.     struct mount    *mnt_prev;        /* prev in mount list */
  91.     struct vfsops    *mnt_op;        /* operations on fs */
  92.     struct vnode    *mnt_vnodecovered;    /* vnode we mounted on */
  93.     struct vnode    *mnt_mounth;        /* list of vnodes this mount */
  94.     int        mnt_flag;        /* flags */
  95.     uid_t        mnt_exroot;        /* exported mapping for uid 0 */
  96.     struct statfs    mnt_stat;        /* cache of filesystem stats */
  97.     qaddr_t        mnt_data;        /* private data */
  98. };
  99.  
  100. /*
  101.  * Mount flags.
  102.  */
  103. #define    MNT_RDONLY    0x00000001    /* read only filesystem */
  104. #define    MNT_SYNCHRONOUS    0x00000002    /* file system written synchronously */
  105. #define    MNT_NOEXEC    0x00000004    /* can't exec from filesystem */
  106. #define    MNT_NOSUID    0x00000008    /* don't honor setuid bits on fs */
  107. #define    MNT_NODEV    0x00000010    /* don't interpret special files */
  108.  
  109. /*
  110.  * exported mount flags.
  111.  */
  112. #define    MNT_EXPORTED    0x00000100    /* file system is exported */
  113. #define    MNT_EXRDONLY    0x00000200    /* exported read only */
  114.  
  115. /*
  116.  * Flags set by internal operations.
  117.  */
  118. #define    MNT_LOCAL    0x00001000    /* filesystem is stored locally */
  119. #define    MNT_QUOTA    0x00002000    /* quotas are enabled on filesystem */
  120.  
  121. /*
  122.  * Mask of flags that are visible to statfs()
  123.  */
  124. #define    MNT_VISFLAGMASK    0x0000ffff
  125.  
  126. /*
  127.  * filesystem control flags.
  128.  *
  129.  * MNT_MLOCK lock the mount entry so that name lookup cannot proceed
  130.  * past the mount point.  This keeps the subtree stable during mounts
  131.  * and unmounts.
  132.  */
  133. #define    MNT_UPDATE    0x00010000    /* not a real mount, just an update */
  134. #define    MNT_MLOCK    0x00100000    /* lock so that subtree is stable */
  135. #define    MNT_MWAIT    0x00200000    /* someone is waiting for lock */
  136. #define MNT_MPBUSY    0x00400000    /* scan of mount point in progress */
  137. #define MNT_MPWANT    0x00800000    /* waiting for mount point */
  138. #define MNT_UNMOUNT    0x01000000    /* unmount in progress */
  139.  
  140. /*
  141.  * Operations supported on mounted file system.
  142.  */
  143. #ifdef KERNEL
  144. #ifdef __STDC__
  145. struct nameidata;
  146. #endif
  147.  
  148. struct vfsops {
  149.     int    (*vfs_mount)    __P((struct mount *mp, char *path, caddr_t data,
  150.                     struct nameidata *ndp, struct proc *p));
  151.     int    (*vfs_start)    __P((struct mount *mp, int flags,
  152.                     struct proc *p));
  153.     int    (*vfs_unmount)    __P((struct mount *mp, int mntflags,
  154.                     struct proc *p));
  155.     int    (*vfs_root)    __P((struct mount *mp, struct vnode **vpp));
  156.             /* int uid,        should be uid_t */
  157.     int    (*vfs_quotactl)    __P((struct mount *mp, int cmds, int uid,
  158.                     caddr_t arg, struct proc *p));
  159.     int    (*vfs_statfs)    __P((struct mount *mp, struct statfs *sbp,
  160.                     struct proc *p));
  161.     int    (*vfs_sync)    __P((struct mount *mp, int waitfor));
  162.     int    (*vfs_fhtovp)    __P((struct mount *mp, struct fid *fhp,
  163.                     struct vnode **vpp));
  164.     int    (*vfs_vptofh)    __P((struct vnode *vp, struct fid *fhp));
  165.     int    (*vfs_init)    __P(());
  166. };
  167.  
  168. #define VFS_MOUNT(MP, PATH, DATA, NDP, P) \
  169.     (*(MP)->mnt_op->vfs_mount)(MP, PATH, DATA, NDP, P)
  170. #define VFS_START(MP, FLAGS, P)      (*(MP)->mnt_op->vfs_start)(MP, FLAGS, P)
  171. #define VFS_UNMOUNT(MP, FORCE, P) (*(MP)->mnt_op->vfs_unmount)(MP, FORCE, P)
  172. #define VFS_ROOT(MP, VPP)      (*(MP)->mnt_op->vfs_root)(MP, VPP)
  173. #define VFS_QUOTACTL(MP,C,U,A,P)  (*(MP)->mnt_op->vfs_quotactl)(MP, C, U, A, P)
  174. #define VFS_STATFS(MP, SBP, P)      (*(MP)->mnt_op->vfs_statfs)(MP, SBP, P)
  175. #define VFS_SYNC(MP, WAITFOR)      (*(MP)->mnt_op->vfs_sync)(MP, WAITFOR)
  176. #define VFS_FHTOVP(MP, FIDP, VPP) (*(MP)->mnt_op->vfs_fhtovp)(MP, FIDP, VPP)
  177. #define    VFS_VPTOFH(VP, FIDP)      (*(VP)->v_mount->mnt_op->vfs_vptofh)(VP, FIDP)
  178. #endif /* KERNEL */
  179.  
  180. /*
  181.  * Flags for various system call interfaces.
  182.  *
  183.  * forcibly flags for vfs_umount().
  184.  * waitfor flags to vfs_sync() and getfsstat()
  185.  */
  186. #define MNT_FORCE    1
  187. #define MNT_NOFORCE    2
  188. #define MNT_WAIT    1
  189. #define MNT_NOWAIT    2
  190.  
  191. /*
  192.  * Generic file handle
  193.  */
  194. struct fhandle {
  195.     fsid_t    fh_fsid;    /* File system id of mount point */
  196.     struct    fid fh_fid;    /* Id of file */
  197. };
  198. typedef struct fhandle    fhandle_t;
  199.  
  200. /*
  201.  * Arguments to mount UFS
  202.  */
  203. struct ufs_args {
  204.     char    *fspec;        /* block special device to mount */
  205.     int    exflags;    /* export related flags */
  206.     uid_t    exroot;        /* mapping for root uid */
  207. };
  208.  
  209. #ifdef MFS
  210. /*
  211.  * Arguments to mount MFS
  212.  */
  213. struct mfs_args {
  214.     char    *name;        /* name to export for statfs */
  215.     caddr_t    base;        /* base address of file system in memory */
  216.     u_long size;        /* size of file system */
  217. };
  218. #endif MFS
  219.  
  220. #ifdef NFS
  221. /*
  222.  * File Handle (32 bytes for version 2), variable up to 1024 for version 3
  223.  */
  224. union nfsv2fh {
  225.     fhandle_t    fh_generic;
  226.     u_char        fh_bytes[32];
  227. };
  228. typedef union nfsv2fh nfsv2fh_t;
  229.  
  230. /*
  231.  * Arguments to mount NFS
  232.  */
  233. struct nfs_args {
  234.     struct sockaddr    *addr;        /* file server address */
  235.     int        sotype;        /* Socket type */
  236.     int        proto;        /* and Protocol */
  237.     nfsv2fh_t    *fh;        /* File handle to be mounted */
  238.     int        flags;        /* flags */
  239.     int        wsize;        /* write size in bytes */
  240.     int        rsize;        /* read size in bytes */
  241.     int        timeo;        /* initial timeout in .1 secs */
  242.     int        retrans;    /* times to retry send */
  243.     char        *hostname;    /* server's name */
  244. };
  245. /*
  246.  * NFS mount option flags
  247.  */
  248. #define    NFSMNT_SOFT    0x0001    /* soft mount (hard is default) */
  249. #define    NFSMNT_WSIZE    0x0002    /* set write size */
  250. #define    NFSMNT_RSIZE    0x0004    /* set read size */
  251. #define    NFSMNT_TIMEO    0x0008    /* set initial timeout */
  252. #define    NFSMNT_RETRANS    0x0010    /* set number of request retrys */
  253. #define    NFSMNT_HOSTNAME    0x0020    /* set hostname for error printf */
  254. #define    NFSMNT_INT    0x0040    /* allow interrupts on hard mount */
  255. #define    NFSMNT_NOCONN    0x0080    /* Don't Connect the socket */
  256. #define    NFSMNT_SCKLOCK    0x0100    /* Lock socket against others */
  257. #define    NFSMNT_WANTSCK    0x0200    /* Want a socket lock */
  258. #define    NFSMNT_SPONGY    0x0400    /* spongy mount (soft for stat and lookup) */
  259. #define    NFSMNT_COMPRESS    0x0800    /* Compress nfs rpc xdr */
  260. #define    NFSMNT_LOCKBITS    (NFSMNT_SCKLOCK | NFSMNT_WANTSCK)
  261. #endif NFS
  262.  
  263. #ifdef KERNEL
  264. /*
  265.  * exported vnode operations
  266.  */
  267. void    vfs_remove __P((struct mount *mp)); /* remove a vfs from mount list */
  268. int    vfs_lock __P((struct mount *mp));   /* lock a vfs */
  269. void    vfs_unlock __P((struct mount *mp)); /* unlock a vfs */
  270. struct    mount *getvfs __P((fsid_t *fsid));  /* return vfs given fsid */
  271. struct    mount *rootfs;                /* ptr to root mount structure */
  272. struct    vfsops *vfssw[];            /* mount filesystem type table */
  273.  
  274. #else /* KERNEL */
  275.  
  276. #include <sys/cdefs.h>
  277.  
  278. __BEGIN_DECLS
  279. int    fstatfs __P((int, struct statfs *));
  280. int    getfh __P((const char *, fhandle_t *));
  281. int    getfsstat __P((struct statfs *, long, int));
  282. int    getmntinfo __P((struct statfs **, int));
  283. int    mount __P((int, const char *, int, void *));
  284. int    statfs __P((const char *, struct statfs *));
  285. int    unmount __P((const char *, int));
  286. __END_DECLS
  287.  
  288. #endif /* KERNEL */
  289.